\subsection{Datentypen}
\label{subsec:Datentypen}
Die in der Kryptographie zumeist verwendeten Datentypen sowie Bijektionen wurden bereits in Abschnitt \ref{sec:Bausteine} be\-schrie\-ben.\\
Zu ihrer Implementierung sich hierbei mehre M\"oglichkeiten an:
\begin{description}
\item [Objektinterne Konvertierung:]{Zun\"achst werden die in der Java-Standard-Bib\-liothek nicht bereits implemetierte Datentypen wie BitVector, Matrix und vorzeichenlose Ganzzahlen mit 8, 16, 32, 64, 128, 192, 256 Bits implementiert. Neben den Methoden, die diese Datentypen sinnvollverweise anbieten (add, subtract, mult, $\ldots$), werden Methoden bereitgestellt, die die Konvertierung in die jeweils anderen Typen durchf\"uhren.\\
Diese Methode bietet den Vorteil, dass die Konvertierungsmethoden nach Feststellen des Zieltyps im Objekt aufgerufen werden kann und keine weitere Suche ausgef\"uhrt werden muss.
Der gro\ss{}e Nachteil dieser Variante ist allerdings, dass bei jedem Hinzuf\"ugen eines neuen Datentyps jede einzelne Klasse angepasst werden muss.}
\item[Zentrale Konvertierung:]{Wie bei der objektinternen Konvertierung werden zu\-n\"achst die fehlenden Datentypen implementiert. Zus\"atzlich wird eine Klasse implementiert, die statische Methoden zur Konvertierung anbietet. \\
Vorteil dieser Mehtode ist die zentrale Bereitstellung der Methoden, so dass nur noch eine Klasse angepasst werden muss. \\
Es bleibt allerdings der Nachteil bestehen, dass bei jedem Hinzuf\"ugen eines neuen Datentyps eine Kernklasse von \RENGA angepasst werden muss.}
\item[Adapter-Pattern:]{Die Datentypen werden mit einem Adapter-Pattern \cite{DesignPattern} realisiert. Dazu wrid zun\"achst einer der Datentypen implementiert, f\"ur jeden weiteren ein Objektadapter wie in \cite{DesignPattern} beschrieben erstellt. Dieser stellt ein Interface bereit bei dessen Benutzung sich der Datentyp wie einer der anderen verh\"alt.\\
Vorteil dieser Methode ist, dass f\"ur jeden neuen Datentypen nur ein neuer Adapter geschrieben werden muss, um ihn zu implementieren.\\
Der Nachteil dieser Methode ist, dass die Implementierung von wichtigen Kernoperationen wie Aufspalten in Teilbl\"ocke und sp\"ateres Zusammenf\"uhren stark erschwert wird.}
\end{description}
Der in \RENGA verwendete Ansatz orientiert sich am Adapter Pattern und der zentralen Konvertierung und verwendet eine Abwandlung des Strategy- und Singelton Patterns \cite{DesignPattern}.\\
Es wurden zun\"achst alle Datentypen sowie ein Converter-Interface implementiert, das als Markerinterface dient und ein Subinterface von UnaryFunction aus MakeJavaUseful ist. Zus\"atzlich wurde eine weitere Klasse entsprechend dem Singleton-Pattern implementiert. Diese dient als zentrale Datenbank, in der Converter registriert und abgefragt werden k\"onnen.\\
Soll ein Datentyp in einen anderen umgewandelt werden, wird bei der zentralen Datenbank eine Anfrage gestellt, die Quell- und Zieltyp angibt, diese liefert, sofern vorhanden, den registrierten Converter. Im n\"achsten Schritt wird der Converter auf den Quelltyp angewendet und man erh\"ahlt eine Instanz des Zieltyps.\\
Aus der obigen Beschreibung ergeben sich die in Abbildung \ref{fig:ConverterRegistry} und \ref{fig:Datatypes} dargestellten UML-Diagramme.
\begin{figure}[htp]
\centering
\includegraphics[scale=.5]{figures/Converter.eps}
\caption{ConverterRegistry und Converter}
\label{fig:ConverterRegistry}
\end{figure}

\begin{figure}[htp]
\centering
\includegraphics[scale=.6,angle=90]{figures/Datatypes.ps}
\caption{Datentypen}
\label{fig:Datatypes}
\end{figure}
